#@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝL 3u } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED999+FREE SECTORS COPYING---D1:BOLDASH2.EXEl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 128ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uUUD.BATe[]} X@ bV>Q "Ck\}T@  DP*"X(3؁Sϒ6$e0<%׻!,eo Ӣ$pRelv R bhA rf4'gD% +3O]D"  K]}$k]P@rχyCKDG@4h-Ġ )HFǰ {"ڈD%`3*7q:~,C^H ҃;$<d ?AD[2a,! 9^}ik`Qqnfmuk iu/aStDMo,Is{V:E@S˧h NJW?WPN4pK[;- '(:k% #ENf9-*H_}-z!"$Bҏ)qTږ.(0)πݍq8T*;2 L%cÅj˘,(D9 gtP! s=se';&j )߸B'D eHS#@`}'  t5oH`9Ҍ!jW̻\ADm!4c Fke0clg+I*Viػ5aXmgYed"4Pvk5-mdWtu.: na}ɖl- +&(j"֤(`cu,yC6WE,ڞ^3!"1y$?Q2IgQwC'5%*(~~HK  gFpub}yI6%`#K˰`*jFy? @1YKq[Z+>T{xfqn2;:zv30F%f;v,$A"V 'k tRe}}1n818b!hdU[e f bC ¬7h,b4GZ\0ݭo)Mٰgul3K!Y4jNçrk~,ۭs慼f}`t nFA9B0[V#")BVHߚ3ϩݶ1'@5; ¤U1#) ~brGL0)a"cAfx6*Хe2*dZf.vq|Hi}2Mf~(CGE-KO}0rv{fSrsIГn2Y*BN"4}ޢA$swwPz8]HŕH(ڸxID~6H2`j} z׎=ClEHQ(/[0&9成-YU;yfw2g,1,cv̒cGVTa+ *MV2hDU[&` ޅY vm[4 I7:.b-5)Ad75)t!I&B 5"E$`h#;4r}!{5Jhx"'n F 짂[`B! ! 2y(! `^b\~IV`BIC@kJ`䈣 eH`8d2u 1s}0AhYNf ™ZjIϖ@c* r^)ӥ "c$wr <| b !,  fH,T _'ڝ(P g9 ) H* EZDt}P% Ѐ!)|k1@9@C@s  p<%0pMZF4{,ĵ$HvLگ:0@CN u}@SM ,͌ 4 < qHp 4"4 \eVI\Z!c7 Rm&U ! 'btX!R ݈9d`=y;A)!#M0Rv}T C 4 ^#;†# ^8%nN#L2C! bJ"`{!^ A yL$ 3\`!&@D*BP!aGop< htx41<'.d<P|Р& C( Za8@2y} Q`4>8X/-) ?H΁@ #B``55$  @ Ց p$'@N#Y,;ǹd&1D0z}A6g@ Z)p4FCc0a7Ph9Y_ ;G*̜h* %S'8 2!B@x@b1H͉yKMEKI{T9N jMբC{}Q#0_'&oTe8) TĤ"؁uHjerbu @u ,@ˇ ku Uf@Ї"hIkZ1T@a̺},'9|}Z\a"H2+z#45pD-j0XH іVMheKVPHBlK9[&}gV]8H>D\ز睎mnuPpWhw#50g/ VUPX}}N k@U}Ǚ_~e > 7umOZ^V<){jB|xM̈APb)ďCAju&$ȃÔW, [^( FL02~} V ˅,q:uT(< % :H@PtչD'&p͋#UϕfO9lB 86hE뢆u+zMZۺOv.mh}IW6hl^:'@*0e^W p]QႠ58wޡ5-{(czuM[UD A+~e `m3B@̡f0C6a}mƀ%0:! d`B mxCA`7 py^: cxA``1A P1 9 @( @p2W8ԁ"gC}. ! nP7|~'b(6}C xd~n@N>iІ20yA Gޠx; < kw+*`n;hj}* @Yk[&_t߇>\_T9v sUhZ~ 8X[fiFo Ѐx]n 6ZFd\fd2f5OR6O+O}"fl9QaL =@9Vj"~QL>p~~X#\&U䀁Hqu3i1ef6$VSaVQ130IT:E A}7g1QE}uh{yt 7lri'z{{numgss47tP8zGyDPcrrw{sĊ|}Fd7PL?w֑gwm p} BZ x䌰&փENCKNE}j˖~t ^pms}u`-HL@Ќ8XgfiXX~ZFixdY BXW'Q}'4p8Q$~Յu 'ipcZ%< :a:>tpfV\p @SD&eJ ^)yd$0JBp`^UF8#uW Ph(}fU_#Up lXO&TCnɔZ<6 vy`EexiNɗ䗠I]9QI) i]iuYX)洁DeYW m8}4Pf9QL ZY[)pp 0i87h|xd|7l`ue0Oul6mnYOV @hZ B dffmn5 yVgJoW}РV\Ǖ\!:3]hZC20jt7=hd! mu7p Jfp8[< E0~wR6O5Y\jd^:iiQ䰣g 6kvk}k?ƓƦ ˖ 9 mFm'ekʤqzf@n&k{|PXcT٩xUX 7 QvaZXe&uF: }zsznz['y 0{Gywxn0|'77ipwʧtpyʟ9'ygyzyWr@yXzwzpqǭeZ97{EPSyYlXN}UFP| r'@1(YrYeTeU(@z~džUFTEV:EYG5R`<+fH6P(  QL0nuMvfdppFZ}}qL)Q5x[qD9?@ pyBp V](H IPDPE0 V@-QI40]OAqI,uR}f\~\q;N;Q0=b G PJ Qp)F SYsLH0[(ԠuYYvLRVB@I^ܳMiz VY}0LpG`5IdXQ.;K#jVeht[N@p}cTSM ZI@g P,Ag',L)_컢1Eqׄ}f= %/G`^0rc p$(ap 8 d K ` J KPkGp0J{"8 0 }̺ kh 0;Iq1:OHYGI5 SRJQHp:L kT@  DP*"X(3؁Sϒ6$e0<%׻!,eo Ӣ$pRelv R bhA rf4'gD% +3}O]D"  K$k]P@rχyCKDG@4h-Ġ )HFǰ {"ڈD%`3*7q:~,C^H ҃;$<d ?AD[2}a,! 9ik`Qqnfmuk iu/aStDMo,Is{V:E@S˧h NJW?WPN4pK[;- '(:k! #EN}f9-*H-z!"$Bҏ)qTږ.(0)πݍq8T*;2 L%cÅj˘,(D9 gtP! s=se';&j)߸B'}D eHS#@'  t5oH`9Ҍ!jW̻\ADm!4c Fke0clg+I*Viػ5aXmgYed"4Pvk5-mdW}tu.: nɖl- +&(j"֤(`cu,yC6WE,ڞ^3!"1y$?Q2IgQwC'5%*(~~HK } gFpuyI6%`#K˰`*jFy?@1YKq[Z+>T{xfqn2;:zv30F%f;v,$A"V} 'k tR}1n818b!hdU[e f bC ¬7h,b4GZ\0ݭo)Mٰgul3K!Y4jNçr}k~,ۭs慼`t nFA9B0[V#")BVHߚ3ϩݶ1'@5; ¤U1#) ~brGL0)a"cAfx6*Хe2*dZ}f.vq|H2Mf~(CGE-KO}0rv{fSrsIГn2Y*BN"4}ޢA$swwPz8]HŕH(ڸxI}D~6H2` z׎=ClEHQ(/[0&9成-YU;yfw2g,1,cv̒cGVTa`9XFG#I)z4ҦoЁ3Cs&iC91X#C1yIi 0/`}se@5 n2s4lp8X/=@aD[A+R׶!ZÅ=9eE#TArN ~@45J'0L!dBc26_/1)u }1,C=:k}Gt0taEaQ p bpGmn!u'6Pm1\ǁPs"f[pDX\"#?8 oBdm}7`eQ_ yxYxxD(fFqjm4gly1&wލP<UUE.BAT.CeF ^CV X@ bV>QJ'C)bȦRd}DM ^$%lrP (H1"K )29 UUE.COM.CeT\2  35`TP!@0 r161F (и* (Ш}: (И!!$ $=,(BE  -z4HhNBД̈́f&4a!AVE @?0qӂ1haÈЁl0n2cL@ ~@ c}Xd>+ *MV2hDU[&` ޅY vm[4 I7:.b-5)Ad75)t!I&B 5"E$`h#;4!{5Jhx"}'n F 짂[`B! ! 2y(! `^b\~IV`BIC@kJ`䈣 eH`8d2u 10AhYNf ™Z}jIϖ@c* r^)ӥ "c$wr <| b !,  fH,T _'ڝ(P g9 ) H* EZDP% Ѐ!)|k}1@9@C@s  p<%0pMZF4{,ĵ$HvLگ:0@CN @SM ,͌ 4 }< qHp 4"4 \eVI\Z!c7 Rm&U ! 'btX!R ݈9d`=y;A)!#M0RT C 4 ^#;†}# ^8%nN#L2C! bJ"`{!^ A yL$ 3\`!&@D*BP!aGop< htx41<'.d<P|Р& C( Za8@2 Q`4>8X/}-) ?H΁@p#B`560h $)Ȁ0> ږ@xX8 83#sFLF &5g0x$9)ᔅ }p q̊Q$PM A*tP @EO Nj46HEDa뤂8%xBkHTpY%PM" 45Z% :TAԊ%61M\ 0dQR9 10#z DMii * 0@C88!J8(xI@h@@p0Ϲ@ @ 0pMhtC.-@B`Mǀt Ja]I=zj0Ø`'4 11>ZG4E**@XH!,b.0s quU !l^ @"FvhxXSThgN{?*s+Xs&-aHjba%A1]J%,@& =/xpE֯}5dy<\=I St/'1Rr1ϪpJŶP0ȋlA#P:a:O* Q8i96#0SeS  @T1a)xX:hr1CX8 `)~A3V\8K.q^gK&&>6XdGpl1gc-J1D,FƵֹ[פ`:,laaJ0ӊ@0 RЁ_-в4C<Щ0(pP0@W;t)xC!.T4hC38Pabҟ C$z^JgNT28C%CbTE%H tipRX(ϣu1FD6DZ s^E'Y c8 { @]l7(2 !;  +P D2&rq~$ЂL8\LD_1?`X d#F}:QZm$Y u$Da;Aұ-1 `PMXQAWhP%C,^Lc5#)<2]R"dCGH1H @@.Qi8NLFH$R|" >f` P1d Œ8B%TrLH: F53T.H4ĠPP DW$ x`& =)[$RJ(h02rpК& QJjB(RG ֜r-|Ā0M0)0%6&ڄB8ҍg*S`mhEǰ9KfLY6l]  k4l`kr86,SC}@G gd+DڍJ %D8qS/mG0wTWIP< N7c0EA>(^@9C4 (@]43B8: {dPTp(BI!yg9c-#Jè2CQI2JGK-' F"@PiʍLN \5CLk( 9ŴT+ SJsDx:iPiu'R`'=a!&9N2aNdK3„8`3>#%<3^ p0 ( آm\ A4^79P4Й1 !`V'A[\OJrltoIIG03"@^ґ`z6e"åy +.u+ { AN\@"0< eHd iʢu)`\`6x@h;+ ,%3/BHXGP&0,ӳ,{KDࠍj5Q)6Ɉp,Q kw2#ڱZTi i@:.PvTs'2 N- ?gXA~ŻHikB XCI0Ρ%@m^6aHEh[) P(#>$=0( 3P5AHFLq-HPl'34R(ߡHHdrn8RJ֊EFXA@JQq3FP/(.۸u7 el&ηj 3y<0l1&@N!ȜC3A{-!\!LP  *Ђ@\^hb`d -- 03E D s 0)66$LM eG}&W00X1< LDxi%)2966 [ *d#̦±G'${A T @bb2aimAiAJRɀ$%Yjk!FBBӃa*iMf[=g4uI. ] @$60,09/8 $($? Qp#LV i:JApG /D0e nUrlt@r!a4S*%, ȸTR ał%Ch832j P LnVZYh KF Pt4` ? ^bcFD1P"e EDj xCt"l7@c I^<ʃč,AsjW`J%@3O7%PM@X`":f:9"<+nTXhd%B.Bd %hgE>e#Ci c '!pC5@g 8nW.Gh(V'Co%B(ۈ"MF ]FʅÕ :b(YF!-Vp} AIBg$]؂.%Dž@$7: `Q;WN Z7ϫ*8 ctxG 96 pU#m#f ݡ`Q9S VS `c,gJ4,` I`N:1I*e^n/̫qCV9u 4F (3PX!_ c 00>(g؍'L-V ֭"%Jس4B] …Е:+$C yT`h!}EhC,h4.s_vH5:Pbct%p\!5̱G3 Vƀ;`1b- m L@ EBPN!Bk/12 tc(#w B3:dZ\Nv1-t \XvܬQKRjV/)lT f5̾v'eccF4CP 2 )]t7#خqR=CK@TvC#U Q: SCqYYF"Pƀ*% ѡ,,h5\Yv/\` MnB1 0\T)3!ˆPmRle9)B&ҁ\Tc1:i9 Vp ",Bd \+ €ed D4Łh0 )@1$;Ϡ 8qʍ$ n.:B<^wGYtG 1Ѡw$WGpwvJ@ $D<(B^p%s t<ʀwIH\@kʐ2b(2K?(""SLIǂDB?Є@X[<&r >!&C Yb+$ F7I60`!!3K^#Kr99l"f@e(#TC!ꠦ!qF]RG-k'h49!THJXu.2",E0|I#AXjf !G."UI;KdJlvL {2 @@ Ł 6lOJB)Oa\CM0I(=M)fIq/]Bn;fAgtBZo^*YPd2BAu2q@f42!c5'bIr<y.;ۦ :CSeH|c1ݰ T\0m 2&IS̃\vޘb0Δ/tﰛRSw0 qxoEG3y:oC= DZfb Eg/``AOiä>Hp- t\j9"P(Gpl: Λp.4FSrbI0xp7 #a&=ϽC4lCyd $rCƘts?Cs2|80?N   +LzjL|F4X!%(!X)A:' ' ?XDIb0c'D44s0㍦@='Ae"&Q&>OrB!ADLB)D%2B,=du:mC[r݅#anL}JY _`a7NV2wardG.B̍ 0a`ſmzBn37d>Ͽg@(Z Gֈ!@w2Ly ~3aeaDR ^8vž7d 冉B@D:L~KA>gJ̀ !bt\ 2vܑU= 64) return; cpt++; } goto again; } /* * copy from in to out, deM}coding as you go along. */ decode() { char buf[LINELEN], outl[LINELEN]; register char * bp, * ut, * trtbl; register uM}nsigned int n, c, len; trtbl = chtbl; for (;;) { if (fgets(buf, sizeof buf, in) == NULL) { Console("Short M}file.\n"); return; } len = strlen(buf); if (len) buf[--len] = '\0'; /* * Get the binary line leM}ngth. */ n = trtbl[*buf]; if (n == NORMLEN) goto decod; /* * end of uuencoded file ? M}*/ if (strncmp(buf, "end", 3) == 0) return; /* * end of current file ? : get next one. */ ifM} (strncmp(buf, "include", 7) == 0) { getfile(buf); continue; } /* * Is it the empty line before the end M}line ? */ if (n <= 0) continue; /* * Pad with blanks. */ decod:for (bp = &buf[c = len];M} c < CODEDLN; c++, bp++) *bp = blank; /* * output a group of 3 bytes (4 input characters). M} * the input chars are pointed to by p, they are to * be output to file f. n is used to tell us not to * outpuM}t all of them at the end of the file. */ ut = outl; len = n; bp = &buf[1]; while (n > 0) { M} *(ut++) = trtbl[*bp] << 2 | trtbl[bp[1]] >> 4; n--; if (n) { *(ut++) = trtbl[bp[1]] << 4 | trtbl[bp[2]] >>M} 2; n--; } if (n) { *(ut++) = trtbl[bp[2]] << 6 | trtbl[bp[3]]; n--; } bp += 4; } M} n = fwrite(outl, 1, len, out); } } /* you may need to rename the filenames at the ends of each part * if the encodM}er encoded them on directories and specified drives. */ getfile(buf) register char * buf; { if ((pos = getnword(buf, 2)) ==M} NULL) { Console("Missing include file name.\n"); exit(11); } else strcpy(ifname, pos); #ifdef M65M }02 fclose(in); if ((in = fopen(fix_pathname(ifname), "r")) == NULL) #else if (freopen(ifname, "r", in) !=in) #endif M!} { Console("Cannot reassign input file to included file.\n"); exit(7); } for (;;) { if (fgets(bufM"}, LINELEN, in) == NULL) { Console("No begin line in included file: "); Console(ifname); Console(".\n"); exit(3);M#} } if (strncmp(buf, "table", 5) == 0) { gettable(); continue; } if (strncmp(buf, "begin", 5) == 0) { M$} break; } } lens = strlen(buf); if (lens) buf[--lens] = '\0'; if ((pos = getnword(buf, 3)) == NULL) { M%} Console("Missing part name, in included begin line.\n"); part = '?'; } else { part = *pos; /* * CheM&}ck the part suffix. */ partn++; if (part != partn) { mism[SUBS1] = part; mism[SUBS2] = partn; Console(M'}mism); } } } /* * Output to console, immune against redirection of stdout. */ Console(s) register char * s; { whileM(} (*s) Bconout(2, *s++); } t to console, immune against redirection of stdout. */ Console(s) register char * s; { whileL0NKLf5HehL1`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±Q*}HȱhL1``e` 0L0L1L1L1L1L1L1 0ȘL1 0L1 M0Hȑh`HȱhL0Q+}HȱhL0Hȱh 0` 0` .1HȥhL1 .1L1 0`HȑhL1L1HH 0hhL1HH 0Q,}hhL1 H*h`L1`L1`HIhIi```IHIh`e` 1L0`R} /* ascii to atascii */ /* This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description .} of your rights and responsibilities about copying it. Give this program and its source away! Help create /}more free software! */ #include #ifndef M6502 #include #endif char buf1[40]; char buf2[40] 0}; main(argc, argv) int argc; char ** argv; { char * name; char * p; FILE * inf; FILE * outf; int ch; 1} if (argc > 1) { name = argv[1]; strcpy(buf1, name); } else { #ifdef M6502 printf("A2AT>" 2}); if (getname(buf1) <= 0) exit(0); name = buf1; #else printf("A2AT what?\n"); exit(0); #endif 3} } fn_default(name, 0, buf1); name = buf1; inf = fopen(name, "r"); /* printf("open '%s'->%x\n", name, inf); */ 4} if ((int)inf <= 0) { printf("Can't open '%s' error %x\n", name, errno); #ifdef M6502 kbdchar(); #endif 5} exit(0); } strcpy(buf2, buf1); p = strchr(buf2, '.'); if (!p) p = buf2 + strlen(buf2); strcpy(p, ".t 6}mp"); outf = fopen(buf2, "w"); /* printf("open '%s'->%x\n", buf2, outf); */ while ((ch = fgetc(inf)) != EOF) { 7} switch (ch) { #ifdef M6502 case 0x0D: fgetc(inf); case 0x0A: ch = '\n'; 8}break; case 0x09: ch = '\t'; break; #else case '\n': ch = 0x9B; break; 9} case '\t': ch = 0x7F; break; #endif } fputc(ch, outf); } fclose(inf); fclose(ou :}tf); delete(buf1); rename(buf2, buf1); } #ifdef M6502 int getname(buf) char * buf; { int i; int ch; i ;} = 0; /* str idx */ for ( ; ((ch = kbdchar()) != '\n') ; ) { if (ch == '\b') { if (i > 0) { <} fputc('\b', stderr); i--; } } else { fputc(ch, stderr); buf[i] = ch; i++; =} } } buf[i] = '\0'; return strlen(buf); } #endif { fputc(ch, stderr); buf[i] = ch; i++; ?/* ascii to atascii *//* This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description of yo?}ur rights and responsibilities about copying it. Give this program and its source away! Help create more free @} software!*/#include #ifndef M6502#include #endifchar buf1[40];char buf2[40];main(argc, argv)iA}nt argc;char ** argv;$( char * name; char * p; FILE * inf; FILE * outf; int ch; if (argc > 1) $( name B}= argv[1]; strcpy(buf1, name); $) else $(#ifdef M6502 printf("A2AT>"); if (getname(buf1) <= 0) C}exit(0); name = buf1;#else printf("A2AT what?\n"); exit(0);#endif $) fn_default(name, 0, buf1); name = D}buf1; inf = fopen(name, "r");/* printf("open '%s'->%x\n", name, inf); */ if ((int)inf <= 0) $( printf("Can't opE}en '%s' error %x\n", name, errno);#ifdef M6502 kbdchar();#endif exit(0); $) strcpy(buf2, buf1); p = strchr(F}buf2, '.'); if (!p) p = buf2 + strlen(buf2); strcpy(p, ".tmp"); outf = fopen(buf2, "w");/* printf("open '%s'->%x\G}n", buf2, outf); */ while ((ch = fgetc(inf)) != EOF) $( switch (ch) $(#ifdef M6502 case 0x0D: H}fgetc(inf); case 0x0A: ch = '\n'; break; case 0x09: ch = '\t'; break;#else I} case '\n': ch = 0x9B; break; case '\t': ch = 0x7F; break;#endif $) fputc(chJ}, outf); $) fclose(inf); fclose(outf); delete(buf1); rename(buf2, buf1);$)#ifdef M6502int getname(buf)char *K} buf;$( int i; int ch; i = 0; /* str idx */ for ( ; ((ch = kbdchar()) != '\n') ; ) $( if (ch == '\b') $(L} if (i > 0) $( fputc('\b', stderr); i--; $) $) else $( fputc(ch, stderr); bM}uf[i] = ch; i++; $) $) buf[i] = '\0'; return strlen(buf);$)#endif else $( fputc(ch, stderr); bR 4LN%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±O}HȱhL!`e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL HȱP}hL Hȱh ` ` %!HȥhL! %!L! `HȑhL!L!HH hhL!HH hhQ}L! H*h`L!`L!HIhIi```IHIh`e` !L `` !L{! !L! !R} {!L ! !L  &L!L! 󨥂fjL! eHehL! 8H哪hL! S}HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&ł'% 0ł T}䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 L H hLU} lHh` {!L !L hh捠ilŕŔ liLV}#`L!  ! Ɣ !$ D$& $ D$& 򦓥 !`Heeh`` W} ! ! ! !Ńł &&L$FfFf3ōŌ8包卅X}FfFfͥ !ĕ !` \$L! ` `Y}S L L L i?H ihL%  (l Z} S# 7   "+  t! A" {! 9!%  %L`&'  t)%  ( " [} %% 9! %  i0% 9! '  . 9! "'' ..  t) .  %¢% \}%  %¢% .  . 9! u ! !¢% ¢%  5% A" 9! (  %¢% (  . 9!  ]}. 9! "P u L'  . 9!L' 9!L'L' #g' q' }'   ].LD'  -  -% ^} /¢% %  /  LY#A2AT>rCan't open '%s' error %x.tmpw S# a  9! . 9! "L(LA(L"( _}~ "9 "(~ ..  ]. u #  9! #L( ..  ].  u A"  u `! u #  9! `}#L>(  u A" `!  5% # LY# S# ((  3 ((  %LY# S# a    t! A" {! t! A" a}  t! P" 9! u # u  9!  ) # LY# S# M ..    t! A" {! t! A"  t! P"  )  LY# S#b}# 7  9!% u # % 9! # {! 9! u !L- u #% "3 u #  9! # #)  ]. u  9!L)LE* c}u  9! u #% "0 u #  9! # #)  ]. u  9!L) u #- " 9! u  9!L* 9d}! u #0 " 0 9!L*  9! u # 3B u #  9! #  1 9! u # 3 u  9!L+L9+e} 9! u #. "< u  9!  1 9! u # 3 u  9!Ld+L+ 9!% u # % 9! # {!! 9!  f}9! u #  9! # # 4L, # u `!  A" `!L,! u  9!L,!   O3L,!    1Lg},!    1L,!   1L,!    1L, u #  LY#L, #+c+s,d,b0,oI,ub,xq}B%DOS SYSB*)DUP SYSSDUMASUU ARCB-A2AT ASCB>A2AT C B,NA2AT COMBAT2A ASCBAT2A C B,AT2A COMBCOMPILE BATB COPYLEFTJRDBREADME TXTBSANITIZEASCBSANITIZEC B-SANITIZECOMB=UNSAN ASCBPUNSAN C B-bUNSAN COMBUUD BATB5UUD C B9)UUD COMBUUD LNK5UUDECODEC UUDEXTRAC UUE BAT;UUE COM=UUE LNK+>UUENCODEC L{,  5% 9! u   u " !  u  9!  u "  u P" 9!L- 9! u ! !7 u #r}  9! # ! )  ]. u  9!L!- u #  9! # !0 u #  9! # #)  ]. u  9!LX- u s}7 u #  9! # ! )  ]. u  9!L-L) u #  LY# A# :3 #L. u LY# E# M   ut} # / 9! " u ..  LY# u  LY# HHIDE Bh VL/` `Œu} eL!L. .`%H$H` HIDEB VL/``@ iɀ` .0v}krwa dKJKHI)a0{8 驛DEB VL/``..` S#w}P 7 R   i0 Ԣ/  2  3P  LY# S#R 7 V   i0 e0  2T :  . 9!x} u 9!L30T u 9!   2 g0  2  2R  LY#, S#P 7 V :  . !2 0 y} % X  2R   %L0R X  %T u !%R .  . !R V  2P  LY#D: A# a  u # z}4 u  9!L1 9! u !LR1 9! u  9!L_1 #91-B1+ 9! u # 3=  u #  u {}#  9! # ! A" 0 P" 9!Lh1  u # # LY# I# a  u  9!  " 9!  " 9!  "  |}" 9! u %  !  u A" `! u # " u #0 A" `!Lz2 u #7 A" `! u  9!}}  u \$ 9! !L1 `! '4 # LY# E#  5% A"  %LY# .2 2DE BJK VL~}/` . 3 3DE!BJK VL/` B V0`` Ԇ !Ԇթ- ؠ0}L|3)ȑ` 0:`` NHɛD 4ȥi揠 4H}hɛ`!8`` A[i ` A# a   5% A"  P" 9!  u "O u ! 9! u #  9! # }  u ! `! u #  9! #  u `!LL4 # LY# A# ": "" " #}LY# `! u #  9! #  u `!LL4 # LY# A# ": "" " # /* atascii to ascii */ /* This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description} of your rights and responsibilities about copying it. Give this program and its source away! Help create }more free software! */ #include #ifndef M6502 #include #define delete unlink #endif char b}uf1[80]; char buf2[80]; main(argc, argv) int argc; char ** argv; { char * name; char * p; FILE * inf; FILE} * outf; int ch; if (argc > 1) { name = argv[1]; strcpy(buf1, name); } else { #ifdef M6}502 printf("AT2A>"); if (getname(buf1) <= 0) exit(0); name = buf1; #else printf("AT2A what?\n"); } exit(0); #endif } fn_default(name, 0, buf1); name = buf1; inf = fopen(name, "r"); /* printf("open '%s'-}>%x\n", name, inf); */ if ((int)inf <= 0) { printf("Can't open '%s' error %x\n", name, errno); #ifdef M6}502 kbdchar(); #endif exit(0); } strcpy(buf2, buf1); p = strchr(buf2, '.'); if (!p) p = buf2 + }strlen(buf2); strcpy(p, ".tmp"); outf = fopen(buf2, "w"); /* printf("open '%s'->%x\n", buf2, outf); */ whil}e ((ch = fgetc(inf)) != EOF) { switch (ch) { #ifdef M6502 case '\n': /* newline ... */ #ifndef we}enix fputc(0x0D, outf); #endif ch = 0x0A; /* ascii linefeed */ break; case '\t': /* tab }... */ ch = 0x09; /* ascii tab */ break; #else case 0x9B: /* atascii eol ...*/ ch = '\n'}; /* newline */ break; case 0x7F: /* atascii tab ...*/ ch = '\t'; /* tab */ break; #endi}f } /* fputc(ch, stdout); */ fputc(ch, outf); } fclose(inf); fclose(outf); delete(buf1); rena}me(buf2, buf1); } #ifdef M6502 int getname(buf) char * buf; { int i; int ch; i = 0; /* str idx */ for} (; ((ch = kbdchar()) != '\n') ; ) { if (ch == '\b') { if (i > 0) { fputc('\b', std}err); i--; } } else { fputc(ch, stderr); buf[i] = ch; i++; }} } buf[i] = '\0'; return strlen(buf); } #endif fputc(ch, stderr); buf[i] = ch; i++; >/* atascii to ascii *//* This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description of yo}ur rights and responsibilities about copying it. Give this program and its source away! Help create more free } software!*/#include #ifndef M6502#include #define delete unlink#endifchar buf1[80];char buf2[80}];main(argc, argv)int argc;char ** argv;$( char * name; char * p; FILE * inf; FILE * outf; int ch; if (argc} > 1) $( name = argv[1]; strcpy(buf1, name); $) else $(#ifdef M6502 printf("AT2A>"); if (getn}ame(buf1) <= 0) exit(0); name = buf1;#else printf("AT2A what?\n"); exit(0);#endif $) fn_default(nam}e, 0, buf1); name = buf1; inf = fopen(name, "r");/* printf("open '%s'->%x\n", name, inf); */ if ((int)inf <= 0)} $( printf("Can't open '%s' error %x\n", name, errno);#ifdef M6502 kbdchar();#endif exit(0); $) strcp}y(buf2, buf1); p = strchr(buf2, '.'); if (!p) p = buf2 + strlen(buf2); strcpy(p, ".tmp"); outf = fopen(buf2, "w")};/* printf("open '%s'->%x\n", buf2, outf); */ while ((ch = fgetc(inf)) != EOF) $( switch (ch) $(#ifd}ef M6502 case '\n': /* newline ... */#ifndef weenix fputc(0x0D, outf);#endif ch = 0x0A; /* ascii li}nefeed */ break; case '\t': /* tab ... */ ch = 0x09; /* ascii tab */ break;#else case }0x9B: /* atascii eol ...*/ ch = '\n'; /* newline */ break; case 0x7F: /* atascii tab ...*/ }ch = '\t'; /* tab */ break;#endif $)/* fputc(ch, stdout); */ fputc(ch, outf); $) fclose(inf); f}close(outf); delete(buf1); rename(buf2, buf1);$)#ifdef M6502int getname(buf)char * buf;$( int i; int ch; i =} 0; /* str idx */ for (; ((ch = kbdchar()) != '\n') ; ) $( if (ch == '\b') $( if (i > 0) $(} fputc('\b', stderr); i--; $) $) else $( fputc(ch, stderr); buf[i] = ch;} i++; $) $) buf[i] = '\0'; return strlen(buf);$)#endif $( fputc(ch, stderr); buf[i] = ch;L P5LN%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±!}HȱhL!`e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL Hȱ!}hL Hȱh ` ` %!HȥhL! %!L! `HȑhL!L!HH hhL!HH hh!}L! H*h`L!`L!HIhIi```IHIh`e` !L `` !L{! !L! !!} {!L ! !L  &L!L! 󨥂fjL! eHehL! 8H哪hL! !}HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&ł'% 0ł !}䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 L H hL!} lHh` {!L !L hh捠ilŕŔ liL!}#`L!  ! Ɣ !$ D$& $ D$& 򦓥 !`Heeh`` !} ! ! ! !Ńł &&L$FfFf3ōŌ8包卅!}FfFfͥ !ĕ !` \$L! ` `!}S L L L i?H ihL%  E)l !} S# 7   "+ !}  t! A" {! 9!%  %L&=(  )%  f( "  %% 9! %  0% 9! !} C(  g. 9! "'E( I/J/  ) /  %% %  %% .  . 9! u ! !}!% %  5% A" 9! _(  %% d(  g. 9!  / 9! "S u L'   . !} 9!L' 9!L'L' #''   .L'  A.  A.%  /% %  )0  LY#AT2A>rCa!}n't open '%s' error %x.tmpw S# a  9! / 9! "L)L(Lu( ~ "9 "(~ G/H/  !}. u #  9! #L) G/H/  .  u A"  u `! u #  9! #L(  u A" `!  5% # L!}Y# S# C)D)  3 C)D)  :&LY# S# a    t! A" {! t! A"  t! P" 9! u # u  9! !} * # LY# S# M E/F/    t! A" {! t! A"  t! P"  *  LY# S## 7  9!% u # % 9! # {! 9!!} u !L4. u #% "3 u #  9! # #)  . u  9!L:*L* u  9! u #% "0 u #  9!}! # #)  . u  9!L:* u #- " 9! u  9!L + 9! u #0 " 0 9!L2+  9! !}u # 3B u #  9! #  U1 9! u # 3 u  9!La+L+ 9! u #. "< u  9!  U1!} 9! u # 3 u  9!L+L+ 9!% u # % 9! # {!! 9!  9! u #  9! # # l4L, # u !} `!  A" `!L-! u  9!L-!   3L-!    2L-!    2L-!  !}  2L-!    2L- u #  LY#L- #%,cK,sX,dj,b,o,u,xL,  5% 9! u   u "!} !  u  9!  u "  u P" 9!Lg- 9! u ! !7 u #  9! # ! )  . u  !}9!Lt- u #  9! # !0 u #  9! # #)  . u  9!L- u 7 u #  9! # ! )  .!} u  9!L-L:* u #  LY# A# 3 #Ld. u LY# E# M   u # `/ 9! " u I/J/ !} LY# u  LY# HHIDE Bh VL/` `Œ eL!L. /`%H$H` !}HIDEB VL/``@ iɀ` K/0krwa dKJ!}KHI)a0{8 驛DEB VL/``I/J/` S#P 7 R   0 '0  3!}  _3P  LY# S#R 7 V   0 0  3T :  . 9! u 9!L0T u 9!   !}3 0  3  03R  LY#, S#P 7 V :  . !2 R1  % X  3R   %L1R !}X  %T u !%R .  . !R V  3P  LY#D: A# a  u # 5 u  9!L[1 9! u !L1!} 9! u  9!L1 #1-1+ 9! u # 3=  u #  u #  9! # ! A" 0 P" 9!L1 !} u # # LY# I# a  u  9!  " 9!  " 9!  "  " 9! u %  !  u!} A" `! u # " u #0 A" `!L2 u #7 A" `! u  9!  u \$ 9! !L92 `! !} z4 # LY# E#  5% A"  %LY# K//3 /3DE BJK VL/` K/^3 ^3DE!BJK !}VL/` B V0`` Ԇ !Ԇթ- ؠ0L3)ȑ` 0:`` !} NHɛD `4ȥi揠 `4Hhɛ`!8`` A[i ` A!}# a   5% A"  P" 9!  u "O u ! 9! u #  9! #  u ! `! u #  9! #  u `!}!L4 # LY# A# ": "" " #LY# `! u #  9! #  u ` ^x cc65 -O %1.Cx a:ra65 %1.M65DEL %1.M65x a:link65 -o %1.com runtime.obj %1.obj c.olbDEL %1.OBJu #  9! #  u `$c This is the copyright notice for RA65, LINK65, LIBR65, and other Atari8-bit programs. Said programs areCopyright 1989)}, by John R. Dunning.All rights reserved, with the follow-ing exceptions: Anyone may copy or redistributethese progra)}ms, provided that:1: You don't charge anything for the copy. It is permissable to charge a nominal fee for media,)} etc.2: All source code and documentation for the programs is made available as part of the distribution.3: Thi)}s copyright notice is preserved verbatim, and included in the distribution. You are allowed to modify theseprog)}rams, and redistribute the mod-ified versions, provided that themodifications are clearly noted. There is NO WARRANTY )}with thissoftware, it comes as is, and is dis-tributed in the hope that it may beuseful. This copyright notice is bas)}ed onthe one published by the Free SoftwareFoundation, sometimes known as the GNUproject. The idea is the same astheirs,)} ie the software is free, andis intended to stay that way.Everybody has the right to copy,modify, and redistribute this so)}ft-ware. Nobody has the right to preventanyone else from copying, modifying orredistributing it.and redistribute this so(e-*- Mode: Text -*-This is the README for UTILS.ARC,which is part of the CC65 distrib-ution.UTILS.ARC contains a bunch o-}f randomutility programs. Currently theseare all things to aid in convertingtext files and C source programsto and from -}Atari formats. Theseprograms are:AT2A Converts a file from Atascii to AsciiA2AT C-}onverts a file from Ascii to AtasciiSANITIZE Convert tabs and C-style braces to -} spaces and $( $)UNSAN Convert $( $) to C- style braces.COMPILE.BAT A Spartados-} command file, suitable for compiling any of these programs.All these progr-}ams are written in C,and source is included. All arecovered by COPYLEFT.JRD; ie they'refree, and are freely distributable-},and may not be sold. To aid in get-ting things set up, both ascii andatascii versions of the source areincluded. The .-}C versions are atascii, the .ASC ones are ascii.All these programs can run eitheras a command, from DOS XL or Sparta-Dos-}, or as an ordinary load file,under DOS 2.5 or similar DOS'es.Using a command line: (this exampleuses SpartaDos, but it -}should workthe same in DOS XL)At the prompt, simply type:AT2A is the file to convert. That's it!All t-}he programs work the same way;AT2A is just an example.Using these programs from DOS'esthat don't hack command lines:Ty-}pe 'L' at your command menu. Whenthe program loads, it will prompt,as AT2A>type in the name of the file to convert, a-}nd hit return. That's it! oads, it will prompt,as AT2A>type in the name of the file to convert, a,0/* SANITIZE.C flush tabs and convert ascii braces to two { }. Aids conversion of C code from ascii to 1}atascii. This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description of your rights 1}and responsibilities about copying it. Give this program and its source away! Help create more free softwa1}re! */ #include #ifndef M6502 #include #define delete unlink #endif char buf1[80]; char buf2[1}80]; main(argc, argv) int argc; char ** argv; { char * name; char * p; FILE * inf; FILE * outf; int ch; 1} if (argc > 1) { name = argv[1]; strcpy(buf1, name); } else { #ifdef M6502 printf("SAN1}ITIZE>"); if (getname(buf1) <= 0) exit(0); name = buf1; #else printf("Sanitize what?\n"); exit(0)1}; #endif } fn_default(name, 0, buf1); name = buf1; inf = fopen(name, "r"); /* printf("open '%s'->%x\n", name1}, inf); */ if ((int)inf <= 0) { printf("Can't open '%s' error %x\n", name, errno); #ifdef M6502 kbdchar()1}; #endif exit(0); } strcpy(buf2, buf1); p = strchr(buf2, '.'); if (!p) p = buf2 + strlen(buf2); s1}trcpy(p, ".tmp"); outf = fopen(buf2, "w"); /* printf("open '%s'->%x\n", buf2, outf); */ while ((ch = fgetc(inf1})) != EOF) { switch (ch) { case 0x7B: fputc('$', outf); fputc('(', outf); 1}break; case 0x7D: fputc('$', outf); fputc(')', outf); break; case '\t': fpu1}tc(' ', outf); fputc(' ', outf); break; default: fputc(ch, outf); } } fclose(1}inf); fclose(outf); delete(buf1); rename(buf2, buf1); } #ifdef M6502 int getname(buf) char * buf; { int i; 1} int ch; i = 0; /* str idx */ for (; ((ch = kbdchar()) != '\n') ; ) { if (ch == '\b') { if1} (i > 0) { fputc('\b', stderr); i--; } } else { fputc(ch, stde1}rr); buf[i] = ch; i++; } } buf[i] = '\0'; return strlen(buf); } #endif fputc(ch, stde0j/* SANITIZE.C flush tabs and convert ascii braces to two $( $). Aids conversion of C code from ascii to atas6}cii. This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description of your rights and respo6}nsibilities about copying it. Give this program and its source away! Help create more free software!*/#inclu6}de #ifndef M6502#include #define delete unlink#endifchar buf1[80];char buf2[80];main(argc, argv)i6}nt argc;char ** argv;$( char * name; char * p; FILE * inf; FILE * outf; int ch; if (argc > 1) $( name 6}= argv[1]; strcpy(buf1, name); $) else $(#ifdef M6502 printf("SANITIZE>"); if (getname(buf1) <= 0) 6} exit(0); name = buf1;#else printf("Sanitize what?\n"); exit(0);#endif $) fn_default(name, 0, buf1); 6} name = buf1; inf = fopen(name, "r");/* printf("open '%s'->%x\n", name, inf); */ if ((int)inf <= 0) $( printf(6}"Can't open '%s' error %x\n", name, errno);#ifdef M6502 kbdchar();#endif exit(0); $) strcpy(buf2, buf1); p 6}= strchr(buf2, '.'); if (!p) p = buf2 + strlen(buf2); strcpy(p, ".tmp"); outf = fopen(buf2, "w");/* printf("open 6 }'%s'->%x\n", buf2, outf); */ while ((ch = fgetc(inf)) != EOF) $( switch (ch) $( case 0x7B: 6 } fputc('$', outf); fputc('(', outf); break; case 0x7D: fputc('$', outf); fputc(')', ou6 }tf); break; case '\t': fputc(' ', outf); fputc(' ', outf); break; default: 6 } fputc(ch, outf); $) $) fclose(inf); fclose(outf); delete(buf1); rename(buf2, buf1);$)#ifdef M6502int getn6 }ame(buf)char * buf;$( int i; int ch; i = 0; /* str idx */ for (; ((ch = kbdchar()) != '\n') ; ) $( if (6}ch == '\b') $( if (i > 0) $( fputc('\b', stderr); i--; $) $) else 6} $( fputc(ch, stderr); buf[i] = ch; i++; $) $) buf[i] = '\0'; return strlen(buf);$)#endif4} 5LN%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±:}HȱhL!`e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL Hȱ:}hL Hȱh ` ` %!HȥhL! %!L! `HȑhL!L!HH hhL!HH hh:}L! H*h`L!`L!HIhIi```IHIh`e` !L `` !L{! !L! !:} {!L ! !L  &L!L! 󨥂fjL! eHehL! 8H哪hL! :}HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&ł'% 0ł :}䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 L H hL:} lHh` {!L !L hh捠ilŕŔ liL:}#`L!  ! Ɣ !$ D$& $ D$& 򦓥 !`Heeh`` :} ! ! ! !Ńł &&L$FfFf3ōŌ8包卅:}FfFfͥ !ĕ !` \$L! ` `:}S L L L i?H ihL%  )l :} S# 7   "+ :}  t! A" {! 9!%  %L&(  *%  ( "  %% 9! %  1% 9! :} (  . 9! "'( //  * \/  %% %  %% .  // 9! u ! :}!% %  5% A" 9! (  %% (  . 9!  m/ 9! "LR( u L;($   : }/(   /LO($   /)   /LO(   /   /LO(   /LO( #'{'}:!}(L)(L'  .  .%  >0% %  }0  LY#SANITIZE>rCan't open '%s' error %x.tmpw S# a :"} 9! \/ 9! "Lp)L(L( ~ "9 "(~ //  / u #  9! #Lm) //  :#}/  u A"  u `! u #  9! #L(  u A" `!  5% # LY# S# ))  G4 ))  :$}:&LY# S# a    t! A" {! t! A"  t! P" 9! u # u  9!  b* # LY# S# M //    t!:%} A" {! t! A"  t! P"  b*  LY# S## 7  9!% u # % 9! # {! 9! u !L. u #% "3 u # :&} 9! # #)  / u  9!L*L* u  9! u #% "0 u #  9! # #)  / u  9!L* u #:'}- " 9! u  9!L`+ 9! u #0 " 0 9!L+  9! u # 74B u #  9! #  1:(} 9! u # 74 u  9!L+L+ 9! u #. "< u  9!  1 9! u # 74 u  9!L ,L6,:)} 9!% u # % 9! # {!! 9!  9! u #  9! # # 4L2- # u `!  A" `!LV-! u  9!LV-:*}!   3LV-!    l2LV-!    l2LV-!   l2LV-!    l2LV- u #:+}  LY#LV- #y,c,s,d,b,o,u -xL"-  5% 9! u   u " !  u  9!  u "  u:,} P" 9!L- 9! u ! !7 u #  9! # ! )  / u  9!L- u #  9! # !0 u # :-} 9! # #)  / u  9!L- u 7 u #  9! # ! )  / u  9!LN.L* u #  LY# A# 3:.} #L. u LY# E# M   u # / 9! " u //  LY# u  LY# HHIDE:/} Bh VL40` `Œ eL!L=/ d/`%H$H` HIDEB VL40``:0}@ iɀ` /0krwa dKJKHI)a0{8 驛:1}DEB VL40``//` S#P 7 R   1 {0  b3  3P  LY# S#R 7 V  :2} 1 1  b3T :  // 9! u 9!L0T u 9!   b3 1  b3  3R  LY#, :3}S#P 7 V :  // !2 1  % X  b3R   %Lo1R X  %T u !%R .  // !:4}R V  b3P  LY#D: A# a  u # W5 u  9!L1 9! u !L1 9! u  9!L2 #1-1+:5} 9! u # 74=  u #  u #  9! # ! A" 0 P" 9!L2  u # # LY# I# a  u  9!  ":6} 9!  " 9!  "  " 9! u %  !  u A" `! u # " u #0 A:7}" `!L!3 u #7 A" `! u  9!  u \$ 9! !L2 `! 4 # LY# E#  5% A"  %LY:8}# /3 3DE BJK VL40` /3 3DE!BJK VL40` B V0`` :9} Ԇ !Ԇթ- ؠ0L#4)ȑ` 0:`` NHɛD 4::}ȥi揠 4Hhɛ`!8`` A[i ` A# a   5% A"  P" 9! :;} u "O u ! 9! u #  9! #  u ! `! u #  9! #  u `!L4 # LY# A# ": "":<} " #LY# `! u #  9! #  u `!L4 # LY# A# ": ""85/* UNSANITIZE.C Opposite of sanitize. turn { } to c-style braces. Aids conversion of C code from atascii >>} to ascii. This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description of your rig>?}hts and responsibilities about copying it. Give this program and its source away! Help create more free so>@}ftware! */ #include #ifndef M6502 #include #define delete unlink #endif char buf1[80]; char b>A}uf2[80]; main(argc, argv) int argc; char ** argv; { char * name; char * p; FILE * inf; FILE * outf; int >B}ch, other_ch; if (argc > 1) { name = argv[1]; strcpy(buf1, name); } else { #ifdef M6502 >C} printf("UNSANITIZE>"); if (getname(buf1) <= 0) exit(0); name = buf1; #else printf("Unsanitize what?>D}\n"); exit(0); #endif } fn_default(name, 0, buf1); name = buf1; inf = fopen(name, "r"); /* printf("open>E} '%s'->%x\n", name, inf); */ if ((int)inf <= 0) { printf("Can't open '%s' error %x\n", name, errno); #ifdef M6>F}502 kbdchar(); #endif exit(0); } strcpy(buf2, buf1); p = strchr(buf2, '.'); if (!p) p = buf2 + >G}strlen(buf2); strcpy(p, ".tmp"); outf = fopen(buf2, "w"); /* printf("open '%s'->%x\n", buf2, outf); */ whil>H}e ((ch = fgetc(inf)) != EOF) { switch (ch) { case '$': other_ch = fgetc(inf); switc>I}h(other_ch) { case '(': other_ch = 0x7B; break; case ')': >J} other_ch = 0x7D; break; default: fputc(ch, outf); } fputc(other>K}_ch, outf); break; default: fputc(ch, outf); } } fclose(inf); fclose(outf); delete>L}(buf1); rename(buf2, buf1); } #ifdef M6502 int getname(buf) char * buf; { int i; int ch; i = 0; /* str>M} idx */ for (; ((ch = kbdchar()) != '\n') ; ) { if (ch == '\b') { if (i > 0) { f>N}putc('\b', stderr); i--; } } else { fputc(ch, stderr); buf[i] = ch; >O} i++; } } buf[i] = '\0'; return strlen(buf); } #endif fputc(ch, stderr); buf[i] = ch; <L/* UNSANITIZE.C Opposite of sanitize. turn $( $) to c-style braces. Aids conversion of C code from atascii tBQ}o ascii. This program is copyleft 1989 by JRD. See COPYLEFT.JRD for a detailed description of your rights and rBR}esponsibilities about copying it. Give this program and its source away! Help create more free software!*/#iBS}nclude #ifndef M6502#include #define delete unlink#endifchar buf1[80];char buf2[80];main(argc, argBT}v)int argc;char ** argv;$( char * name; char * p; FILE * inf; FILE * outf; int ch, other_ch; if (argc > 1) BU} $( name = argv[1]; strcpy(buf1, name); $) else $(#ifdef M6502 printf("UNSANITIZE>"); if (getnamBV}e(buf1) <= 0) exit(0); name = buf1;#else printf("Unsanitize what?\n"); exit(0);#endif $) fn_defaultBW}(name, 0, buf1); name = buf1; inf = fopen(name, "r");/* printf("open '%s'->%x\n", name, inf); */ if ((int)inf <= 0)BX} $( printf("Can't open '%s' error %x\n", name, errno);#ifdef M6502 kbdchar();#endif exit(0); $) strcpyBY}(buf2, buf1); p = strchr(buf2, '.'); if (!p) p = buf2 + strlen(buf2); strcpy(p, ".tmp"); outf = fopen(buf2, "w");BZ}/* printf("open '%s'->%x\n", buf2, outf); */ while ((ch = fgetc(inf)) != EOF) $( switch (ch) $( B[} case '$': other_ch = fgetc(inf); switch(other_ch) $( case '(': other_ch = 0xB\}7B; break; case ')': other_ch = 0x7D; break; default: fpuB]}tc(ch, outf); $) fputc(other_ch, outf); break; default: fputc(ch, outf); $) B^} $) fclose(inf); fclose(outf); delete(buf1); rename(buf2, buf1);$)#ifdef M6502int getname(buf)char * buf;$( int iB_}; int ch; i = 0; /* str idx */ for (; ((ch = kbdchar()) != '\n') ; ) $( if (ch == '\b') $( if (B`}i > 0) $( fputc('\b', stderr); i--; $) $) else $( fputc(ch, stderr); Ba} buf[i] = ch; i++; $) $) buf[i] = '\0'; return strlen(buf);$)#endif $( fputc(ch, stderr); @^ 5LN%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±Fc}HȱhL!`e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL HȱFd}hL Hȱh ` ` %!HȥhL! %!L! `HȑhL!L!HH hhL!HH hhFe}L! H*h`L!`L!HIhIi```IHIh`e` !L `` !L{! !L! !Ff} {!L ! !L  &L!L! 󨥂fjL! eHehL! 8H哪hL! Fg}HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&ł'% 0ł Fh}䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 L H hLFi} lHh` {!L !L hh捠ilŕŔ liLFj}#`L!  ! Ɣ !$ D$& $ D$& 򦓥 !`Heeh`` Fk} ! ! ! !Ńł &&L$FfFf3ōŌ8包卅Fl}FfFfͥ !ĕ !` \$L! ` `Fm}S L L L i?H ihL%  )l Fn} S# 7   "+ Fo}  t! A" {! 9!%  %L&y(  *%  ( "  %% 9! %  0% 9! Fp} (  . 9! "'( //  * J/  %% %  %% .  / 9! u ! Fq}!% %  5% A" 9! (  %% (  . 9!  [/ 9! "L>( u L/(  [/ 9!Fr} u L'{ 9!L (} 9!L (   .L ( #'(')L'   .L;(   .L;( #'$L(L'  Fs}.  .%  ,0% %  k0  LY#UNSANITIZE>rCan't open '%s' error %x.tmpw S# a  9! J/ 9! Ft} "L^)L(L( ~ "9 "(~ //  . u #  9! #L[) //  .  u A" Fu} u `! u #  9! #L(  u A" `!  5% # LY# S# ))  54 ))  :&LY# S# a  Fv}  t! A" {! t! A"  t! P" 9! u # u  9!  P* # LY# S# M //    t! A" {! t! A" Fw} t! P"  P*  LY# S## 7  9!% u # % 9! # {! 9! u !Lv. u #% "3 u #  9! # #)  Fx}. u  9!L|*L* u  9! u #% "0 u #  9! # #)  . u  9!L|* u #- " 9!Fy} u  9!LN+ 9! u #0 " 0 9!Lt+  9! u # %4B u #  9! #  1 9! u # %4Fz} u  9!L+L+ 9! u #. "< u  9!  1 9! u # %4 u  9!L+L$, 9!% u # F{}% 9! # {!! 9!  9! u #  9! # # 4L - # u `!  A" `!LD-! u  9!LD-!   3LD-F|}!    Z2LD-!    Z2LD-!   Z2LD-!    Z2LD- u #  LY#LD- #g,c,F}}s,d,b,o,u,xL-  5% 9! u   u " !  u  9!  u "  u P" 9!L-F~} 9! u ! !7 u #  9! # ! )  . u  9!L- u #  9! # !0 u #  9! # #)  F}. u  9!L- u 7 u #  9! # ! )  . u  9!L<.L|* u #  LY# A# 3 #LF}. u LY# E# M   u # / 9! " u //  LY# u  LY# HHIDE Bh VL"0`F} `Œ eL!L+/ R/`%H$H` HIDEB VL"0``@ iF}ɀ` /0krwa dKJKHI)a0{8 驛DEB VF}L"0``//` S#P 7 R   0 i0  P3  3P  LY# S#R 7 V   0 0  F}P3T :  / 9! u 9!L0T u 9!   P3 0  P3  r3R  LY#, S#P 7 V : F}  / !2 1  % X  P3R   %L]1R X  %T u !%R .  / !R V  P3PF}  LY#D: A# a  u # E5 u  9!L1 9! u !L1 9! u  9!L1 #1-1+ 9! u # %4=F}  u #  u #  9! # ! A" 0 P" 9!L1  u # # LY# I# a  u  9!  " 9!  "F} 9!  "  " 9! u %  !  u A" `! u # " u #0 A" `!L3 u #F}7 A" `! u  9!  u \$ 9! !L{2 `! 4 # LY# E#  5% A"  %LY# /q3 q3DF}E BJK VL"0` /3 3DE!BJK VL"0` B V0`` Ԇ !Ԇթ-F} ؠ0L4)ȑ` 0:`` NHɛD 4ȥiF}揠 4Hhɛ`!8`` A[i ` A# a   5% A"  P" 9!  u "O u !F} 9! u #  9! #  u ! `! u #  9! #  u `!L4 # LY# A# ": "" " F} #LY# `! u #  9! #  u `!L4 # LY# A# ": "" " D#` 1L1 1L1 1L1 1 1L0 1 1L0 0 &L1L1 0󨥂fjL1 0eHehL1 0R}8H哪hL1 0HhL1 0EHEhL1 0%H%hL1`\_ 0łXTM 0łFBE 00>7ł86/ 0䃐-&łR}'% 00ł 0䃐 ł`` 00ł 0䃐ł۰ 00łʰ 0䃐ł𹰼 R}L0H hL0lHh` 1L0 1L0hh捠ilŕŔ R}liL3`L1 0 1 Ɣ 1$ \4& $ \4& 򦓥 1`HR}eeh`` 0 1 1 1 1Ńł &&L4FfFf3ōR}Ō8包卅FfFfͥ 1ĕ 1` t4L1 0 0 ` 0R}`S L L L i?H ihL5 0 Gl ;R}R}a R}k3 u0 3 2 u0 3 2 u0 3 0 B1 4L6 u0 1 1 1Lq3 u0 0 B1 1L7 u0 3 2R} u0 3 2 u0 1 u0 3 0 B1 4L<7 u0 1 1 1Lq3 u0 3 2 u0 3 2 u0 R}3 0 B1 4L7 u0 1 1 1Lq3L'7 u0Lq3 k3 70 1 24 0Ѣ; 06 0 1 }1 Y2 0 H Y2 B1R} 1 2$֢; 0 }E< 0 }E 0 G 1 }1 Y2 3 F 0"< 0 wG55 0 2$< 0 }E 0R} G B1 1 25L8 u0 3 0 B1 4L85 0 u0 Y2 0 i1L8 B1 B1 1` 2IL_9 u0 3 0R} B1 4 u0 3 0 B1 4L%95 0 u0 Y2 0 u0 i1L69` B1 1 25L9 u0 3 0 B1 4L95 0 u0 Y2 0R} i1L95 0` Y2 05 0 Y2 1 i15 0~ Y2 05 0^ Y2 1 i1 y6L:L: 0P 055 0 G R}0 2;< 0 }E 0 G 0J< 0 0 E 0 2 instead of <%>.UUD>Almost foolproof uudecode v1.0 15-Feb-1987 JPHDUsage: uudecode inputfilerCant open iR}nput file.No begin linetablebeginMissing filename in begin line.wbCannot open output file k3V 70 B1 BR}1 1 25L< u0 3 0 B1 4L<5 0 u0 Y2 0 i1L 0 }R}E 0 G 0> 0 0 E 0 2Ţ> 0 }E 0 G 0 0 M5 Y2 0 h2 B1 1 i1 u0 R}3 2" 1 i1 u0 3 0 B1 4L= 0 B1 u0 1 B1 1L>5 0 u0 Y2 3 2> 0 }E 0 R}G 1 2 u0y65 0 u0 Y2 0 u0 3 0 B1 4 i1 1@ 33V 0Lq3 u0 3 0 B1 4L=V 0Lextern FILE * fopen();extern chaZ}r * strcpy();#ifdef M6502#define exit(x) careful_exit(x)#else#include #define fix_pathname(foo) foo#endif#Z}define MAXCHAR 127#define LINELEN 80#define FILELEN 64#define CODEDLN 61#define NORMLEN 45char * mism = "Part suffix miZ}smatch: <%> instead of <%>.\n";#define SUBS1 23#define SUBS238FILE * in, * out;char ifname[FILELEN];char chtbl[MAXCHAZ}R];char * pos;char blank, part = '\0';int partn = 'a';int lens;#ifdef M6502char argbuf[80];#endif/* * Bring back aZ} pointer to the start of the nth word. */char * getnword(str, n)register char * str;register int n;{ while ((*str == 'Z}\t') || (*str == ' ')) str++; if (!*str) return NULL; while (--n) { while ((*str != '\t') && (*str != 'Z} ') && (*str))str++; if (!*str)return NULL; while ((*str == '\t') || (*str == ' '))str++; if (!*str)Z}return NULL; } return str;}main(argc, argv)int argc;char * argv[];{ register int i, j; char dest[FILELEN], bZ}uf[LINELEN];#ifdef M6502 if (argc < 2) argc = 1 + readargs("UUD>", argbuf, argv + 1);#endif if (argc < 2) { Z} Console("Almost foolproof uudecode v1.0 15-Feb-1987 JPHD\n"); Console("Usage: uudecode inputfile\n"); exit(1Z}); } if ((in = fopen(fix_pathname(argv[1]), "r")) == NULL) { Console("Cant open input file.\n"); exit(2Z}); } /* * Set up the default translation table. */ for (i = 0; i < ' '; i++) chtbl[i] = '\0'; for (i = 'Z} ', j = 0; i < ' ' + 64; i++, j++) chtbl[i] = j; for (i = ' ' + 64; i < MAXCHAR; i++) chtbl[i] = '\0'; chtbl['`']Z} = chtbl[' '];/* common mutation */ chtbl['~'] = chtbl['^'];/* an other common mutation */ blank = ' '; /* * searcZ}h for header or translation table line. */ for (;;) { if (fgets(buf, sizeof buf, in) == NULL){ Console("NZ}o begin line\n"); exit(3);} if (strncmp(buf, "table", 5) == 0){ gettable(); continue;} if (strncmpZ}(buf, "begin", 5) == 0){ break;} } lens = strlen(buf); if (lens) buf[--lens] = '\0'; if ((pos = getnwordZ}(buf, 3)) == NULL) { Console("Missing filename in begin line.\n"); exit(10); } else strcpy(dest, poZ}s); if ((out = fopen(fix_pathname(dest), "wb")) == NULL) { Console("Cannot open output file\n"); exit(4);Z} } decode(); fclose(out); exit(0);}/* * Install the table in memory for later use. */gettable(){ char buf[LZ}INELEN]; register int c, n; register char * cpt; n = 0; for (c = 0; c <= MAXCHAR; c++) chtbl[c] = '\0'; again:Z}if (fgets(buf, sizeof buf, in) == NULL) { Console("EOF while in translation table.\n"); exit(5); } if (strnZ}cmp(buf, "begin", 5) == 0) { Console("Incomplete translation table.\n"); exit(6); } cpt = buf + strlen(Z}buf) - 1; *cpt = ' '; while (*(cpt) == ' ') { *cpt = '\0'; cpt--; } cpt = buf; while (c = *cpt) Z} { if (chtbl[c] != '\0'){ Console("Duplicate char in translation table.\n"); exit(6);} if (n == 0)bZ}lank = c; chtbl[c] = n++; if (n >= 64)return; cpt++; } goto again;}/* * copy from in to out, deZ}coding as you go along. */decode(){ char buf[LINELEN], outl[LINELEN]; register char * bp, * ut, * trtbl; register uZ}nsigned int n, c, len; trtbl = chtbl; for (;;) { if (fgets(buf, sizeof buf, in) == NULL){ Console("Short Z}file.\n"); return;} len = strlen(buf); if (len)buf[--len] = '\0'; /* * Get the binary line leZ}ngth. */ n = trtbl[*buf]; if (n == NORMLEN)goto decod; /* * end of uuencoded file ? Z}*/ if (strncmp(buf, "end", 3) == 0)return; /* * end of current file ? : get next one. */ ifZ} (strncmp(buf, "include", 7) == 0){ getfile(buf); continue;} /* * Is it the empty line before the end Z}line ? */ if (n <= 0)continue; /* * Pad with blanks. */ decod:for (bp = &buf[c = len];Z} c < CODEDLN; c++, bp++) *bp = blank; /* * output a group of 3 bytes (4 input characters). Z} * the input chars are pointed to by p, they are to * be output to file f. n is used to tell us not to * outpuZ}t all of them at the end of the file. */ ut = outl; len = n; bp = &buf[1]; while (n > 0){ Z} *(ut++) = trtbl[*bp] << 2 | trtbl[bp[1]] >> 4; n--; if (n) { *(ut++) = trtbl[bp[1]] << 4 | trtbl[bp[2]] >>Z} 2; n--; } if (n) { *(ut++) = trtbl[bp[2]] << 6 | trtbl[bp[3]]; n--; } bp += 4;}Z} n = fwrite(outl, 1, len, out); }}/* you may need to rename the filenames at the ends of each part* if the encodZ}er encoded them on directories and specified drives.*/getfile(buf)register char * buf;{ if ((pos = getnword(buf, 2)) ==Z} NULL) { Console("Missing include file name.\n"); exit(11); } else strcpy(ifname, pos);#ifdef M65Z}02 fclose(in); if ((in = fopen(fix_pathname(ifname), "r")) == NULL)#else if (freopen(ifname, "r", in) !=in)#endif Z} { Console("Cannot reassign input file to included file.\n"); exit(7); } for (;;) { if (fgets(bufZ}, LINELEN, in) == NULL){ Console("No begin line in included file: "); Console(ifname); Console(".\n"); exit(3);Z}} if (strncmp(buf, "table", 5) == 0){ gettable(); continue;} if (strncmp(buf, "begin", 5) == 0){Z} break;} } lens = strlen(buf); if (lens) buf[--lens] = '\0'; if ((pos = getnword(buf, 3)) == NULL) { Z} Console("Missing part name, in included begin line.\n"); part = '?'; } else { part = *pos;/* * CheZ}ck the part suffix. */ partn++; if (part != partn){ mism[SUBS1] = part; mism[SUBS2] = partn; Console(Z}mism);} }}/* * Output to console, immune against redirection of stdout. */Console(s)register char * s;{ whileZ} (*s) Bconout(2, *s++);}t to console, immune against redirection of stdout. */Console(s)register char * s;{ whileX/* Extra stuff for uudecode on M6502 -- jrd*/#include extern FILE * in;extern FILE * out;#ifdef M6502int^} strncmp (str1, str2, nbytes)char * str1;char * str2;int nbytes;{ while (--nbytes >= 0 && (*str1 == *str2++)) if (!^}*str1++) return(0); return(nbytes < 0 ? 0 : *str1 - *--str2);}Bconout(foo,c)int foo;char c;{ cputc(c,0);}c^}har tmp_path[80];char * fix_pathname(p)char * p;{ if (strchr(p, ':')) return(p); else { strcpy(tmp_path^}, "D:"); strcat(tmp_path, p); return(tmp_path); }}careful_exit(x)int x;{ if (out) fclose(out); i_}f (in) fclose(in); exit(x);}#endifturn(tmp_path); }}careful_exit(x)int x;{ if (out) fclose(out); i\,X CC65 -V -O UUENCODE.CX RA65 UUENCODE.M65X LINK65 -V -M -B3000 -O UUE.COM @UUE.LNKnt x;{ if (out) fclose(out); i`V0LLf5HehL1`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±g}HȱhL1``e` 0L0L1L1L1L1L1L1 0ȘL1 0L1 M0Hȑh`HȱhL0g}HȱhL0Hȱh 0` 0` .1HȥhL1 .1L1 0`HȑhL1L1HH 0hhL1HH 0g}hhL1 H*h`L1`L1`HIhIi```IHIh`e` 1L0`g}` 1L1 1L1 1L1 1 1L0 1 1L0 0 &L1L1 0󨥂fjL1 0eHehL1 0g}8H哪hL1 0HhL1 0EHEhL1 0%H%hL1`\_ 0łXTM 0łFBE 00>7ł86/ 0䃐-&łg}'% 00ł 0䃐 ł`` 00ł 0䃐ł۰ 00łʰ 0䃐ł𹰼 g }L0H hL0lHh` 1L0 1L0hh捠ilŕŔ g }liL3`L1 0 1 Ɣ 1$ \4& $ \4& 򦓥 1`Hg }eeh`` 0 1 1 1 1Ńł &&L4FfFf3ōg }Ō8包卅FfFfͥ 1ĕ 1` t4L1 0 0 ` 0g }`S L L L i?H ihL5 0 wFl k3 M0 B1 u0 3 0 B1 4 g}1 1 u0 3 0 B1 4L5 u0 0 B1 0 33( u0 0 B1 3 0 2  u0 0Lq3L5 0Lq3g} k3 1: 0 H  u0Lq3L6=6 0ܢ6 0 -5=6 0 1 g}G=6Lq3Lq3D:a}g} k3 1 24 09 097 0 1 }1 Y2 0 G Y2g} B1GG66 1 2!GG 09 0 A 0 @ 1 }1 Y2 1 3- 2i 1 }1 Y2 3 F 17787g}7787 0 2GG 0֢9 0 A @5767 u0 3 0 B1 4 1 }1 Y2 3 : 1 }1 Y2 3 6 0g}9 0 *A66 0 23GG 09 0 1 }1 Y2 3 A 0 @6 0 6 0: 0 *A66 1!GG 0g}: 0 A 0 @ -:66 0: 0 0 1 }1 Y2 3 A <66 0(: 0 A 0 @Lq3UUE>Usage: ug}uencode [-n] inputfileWrong file length arg.rbCannot open %swCannot reassign stdoutbegin %o %send k3 a066 g}0: 0 A  B1 B1 1` 2cL: u0 3 0 B1 4LZ: 1 2 066 0 @ u0 3 0 B1 4 g}066 0 @Lk: 066 0 @ #0Lq3table k3 M06 0 1 -56 0. 0 5 B1 16 06 0 M5 g}Y2 B1 u0 3 0 B1 4 0. i1 u0 3 0 B1 4 0u i1 u0 3 0 B1 4 03747 0a h2 0 t4 0a Y2 ig}1 u0 3 0 B1 4 03747 0a h2 0 #5 0a Y2 i1 u0 3 0 B1 4 0 i1 0Lq3g}g} k3 i0 B1c< 06 0 -5LL5=3747 066 0 @ 066 0 @ u0 0 B15767 0g} 2 17787 3L>3747 03747c< 0 :66 0> 06 0 A66 0 dG6 0 6 0> 0g} *A66 1!GG 0> 0 A 0 @ -:66 0> 03747 0 A B1 1 2L>L< +0Lq3includeg } %swCannot reassign stdoutbegin part %c k3 q0 u0 3 82 B1 u0 3 2 00 2 0 1 Y2 3 82 0g!} 2 ~2 B1 1 Y2 3 2 0< 2 0 1 Y2 3 82 0 2 ~2 B1 1 Y2 3? 2 B1 1?g"} 2 0 Y2 066 0 @ 1? 2 0 Y2 066 0 @ 1? 2 0 Y2 066 0 @ 1? 2 0g#} Y2 066 0 @ 30Lq3 k3 a0 B1 1 u0 2`Lk@ u0 3 0 B1 4LC@66 0 sA B1 1 2 u0 #0g$}Lq3 1 u0 Y2 0 u0 i1LU@ u0 #0Lq3 k36 6 166 0 dG6 6 166 0 dG 1 5Lq3 0 0HHIg%}DE Bh VLH` ]3 M0 1 u0 3 H B1 1 2 u0GG 0Lq3 u0 0Lq3 0HIDEB Vg&}LH`` k3 a0 0 0 }1 Y2 1 }1 Y2 0 }1 h2 B1 u0 3 u0 0 B1 0 #include #ifdef M6502char * rindex(str, chr)char * str;chaoD}r chr;{ int n; n = 0; while (*str++) n++; while (--n >= 0) if (*--str == chr) return(str); return((oE}char * )0);}char tmp_path[80];char * fix_pathname(p)char * p;{ if (strchr(p, ':')) return(p); else { oF} strcpy(tmp_path, "D:"); strcat(tmp_path, p); return(tmp_path); }}#define exit careful_exit#elseextern oG}char * rindex();#define fix_pathname(foo) foo#endif#define USAGE "Usage: uuencode [-n] inputfile\n"/* ENC is the basic oH}1 character encoding function to make a char printing */#define ENC(c) (((c) & 077) + ' ')extern FILE * freopen(), * fopeoI}n();FILE * fp;FILE * outfp;char ofname[80];int part = 'a';int split = 0; fileln = 32000;#ifdef M6502char argbuf[80];oJ}#endifmain(argc, argv)int argc; char *argv[];{#ifdef M6502 if (argc < 2) argc = 1 + readargs("UUE>", argbuf, argv oK}+ 1);#endif outfp = stdout; if (argc < 2) { fprintf(stderr, USAGE); exit(2); } if (argv[1][0] ==oL} '-') { fileln = -atoi(argv[1]); if (fileln <= 0) { fprintf(stderr, "Wrong file length arg.\n"); exioM}t();} split = 1; argv++; } makename(argv[1]); if ((fp=fopen(fix_pathname(argv[1]), "rb"))==NULL) /* binoN}ary input !!! */ { fprintf(stderr,"Cannot open %s\n",argv[1]); exit(1); }/* if(freopen(ofname, "w", stdoO}out)!=stdout) */ if (!(outfp = fopen(fix_pathname(ofname), "w"))) { fprintf(stderr,"Cannot reassign stdout\n");oP} exit(1); } maketable();/* printf("begin %o %s\n", 0644, argv[1]); */ fprintf(outfp, "begin %o %s\n", 0644, aoQ}rgv[1]); encode();/* printf("end\n"); */ fprintf(outfp, "end\n"); exit(0);}/* create ASCII table so a mailer can soR}crew it up and the decode * program can restore the error. */maketable(){ register int i, j;/* fputs("table", outfp)oS}; */ fprintf(outfp, "table\n"); for(i = ' ', j = 0; i < '`' ; j++) { if (j == 32)/*putchar('\n'); */fputc(oT}'\n', outfp); fputc(i++,outfp); }/* putchar('\n'); */ fputc('\n', outfp);}/* I include this in all of my prooU}grams to take the guess work out of * filenames. */makename(name)char name[];{ register char * ptr; strcpy(ofname, oV}name);#ifdef old /* I think index is neat; just look for a character, and * bomb it. Voila, you have a substring, no moW}ess. */ if(ptr = rindex(ofname,'.')) { *ptr = '\0'; *--ptr = part; } else/* i.e. make the lasoX}t character in the first name = part */ ofname[strlen(ofname)-1] = part; strcat(ofname,".uue");#else if (!(ptoY}r = rindex(ofname, '.'))) ptr = ofname + strlen(ofname); *ptr++ = '.'; *ptr++ = 'u'; *ptr++ = ((part - 'a') / 26) +oZ} 'a'; *ptr++ = ((part - 'a') % 26) + 'a'; *ptr++ = '\0';#endif return;}/* * copy from stdin to stdout, encoding aso[} you go along. */char buf[80];char file[80];encode(){ register int i, n; register int lines; lines = 6; strcpy(o\}file,ofname); for (;;) { n = fr(buf, 45);/* putchar(ENC(n)); */ fputc(ENC(n), outfp); for (i =o]} 0; i < n; i += 3)outdec(&buf[i]);/* putchar(part); */ fputc(part, outfp);/* putchar('\n'); */ fputo^}c('\n', outfp); ++lines; if ((split != 0) && (lines > fileln)) { ++part; makename(file); fprintf(outfpo_}, "include %s\n",ofname);/* if(freopen(ofname, "w", stdout)!=stdout) */ fclose(outfp); if (!(outfp = fopen(fix_patho`}name(ofname), "w"))) { fprintf(stderr,"Cannot reassign stdout\n"); exit(1); } maketable();/* proa}intf("begin part %c\n",part); */ fprintf(outfp, "begin part %c\n",part); lines = 6;} if (n <= 0)break; }ob}}/* * output one group of 3 bytes, pointed at by p, on file f. */outdec(p)register char *p;{ register int c1, c2, c3oc}, c4; c1 = *p >> 2; c2 = (*p << 4) & 060 | (p[1] >> 4) & 017; c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03; c4 = p[2] &od} 077;/* putchar(ENC(c1)); */ fputc(ENC(c1), outfp);/* putchar(ENC(c2)); */ fputc(ENC(c2), outfp);/* putchar(ENC(c3)oe}); */ fputc(ENC(c3), outfp);/* putchar(ENC(c4)); */ fputc(ENC(c4), outfp);}/* fr: like read but stdio */int fr(buf,of} cnt)register char * buf;register int cnt;{ register int c, i; for (i = 0; i < cnt; i++) { c = fgetc(fp); og} if /* (feof(fp)) */ (c == EOF)return(i); buf[i] = c; } return (cnt);}#ifdef M6502#undef exitcareful_oh}exit(x)int x;{ if (outfp) fclose(outfp); if (fp) fclose(fp); exit(x);}#endifdef M6502#undef exitcareful_l_